Realistically rendering crowds, vegetation, and other animated background objects has always been a difficult problem in video games. For realism, one must render a large number of models with substantial variety in motion and textures. However, a crowd or other background is usually not the main focus of a scene, so given the limitations on processing power, only a limited amount of the available processing power can be dedicated to rendering the background in a scene.
Rendering an entire crowd in 3D would be prohibitive with current hardware. Instead, most games use a relatively crude technique to render a crowd, in which a set of crowd members are pre-rendered and stored in a bank of textures. At run-time, the game simply applies theses textures on rows of rectangles. Just like in cartoons, the impression of motion is given by rapidly switching from one texture to another. This technique is fast, but is quite memory consuming. The game must store a texture for each crowd member, for each frame in every animation. The other drawback of this technique is that it only looks realistic so long as the view point (or camera) is sufficiently far from the polygons representing the crowd and remains perpendicular to them. As soon as the view point or camera gets too close, the illusion is broken, because the eye readily perceives the “flat” aspect of the polygons used to render the crowd.
A technique for disguising the flat appearance of a background employs a pair of orthogonal polygons for each object. In this way, a changing image is visible as the view point or camera moves around the orthogonal polygons. However, if the camera moves above or below the orthogonal polygons, the edges of the polygons are visible, which destroys the realism.
Another current technique uses images taken from multiple 3D directions of an individual 3D model; each such image is stored as a texture. The texture that most closely matches the current camera angle is then rendered. However, this technique requires a large amount of storage for storing multiple textures of multiple 3D models. Even more storage is required if each model is depicted in a number of animated positions, because each position requires multiple textures for the multiple directions.
A fundamental problem with these prior art techniques is that they treat each object individually. Each polygon and/or texture must be recomputed relative to a new view point or camera position during each image frame. This computation requires excessive processor cycles although each view point involves only a slightly different angle for each polygon. Although, computing the perfect angle for each polygon is accurate, such precision is not required for backgrounds. Instead, it is preferable to treat a large number of similar objects together so as to reduce processor cycles and memory requirements. Current techniques are simply not able to provide realistic backgrounds in a scene without requiring unavailable processing power and/or excessive memory to store pre-rendered elements.